﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using EFramework.Web.TypeExtension;

namespace  RzCorportativo.Views.Farmacia
{
    public partial class Medicamento : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.TipoMedicamento.Attributes.Add("url", this.ResolveUrl("~/Views/Farmacia/Medicamento.aspx/ListarTipo"));
            this.CNPJ.Attributes.Add("url", this.ResolveUrl("~/Views/Farmacia/Medicamento.aspx/ListarFornecedor"));
            if (this.IsPostBack)
                return;
            var itens = RzCorportativo.Lib.TipoAplicacao.Listar(new RzCorportativo.Lib.TipoAplicacao());
            itens.Insert(0, new RzCorportativo.Lib.TipoAplicacao() { TipoAplicacaoId = 0, Descricao = "TIPO DE APLICAÇÃO" });
            this.TipoAplicacao.DataSource = itens;
            this.TipoAplicacao.DataTextField = "Descricao";
            this.TipoAplicacao.DataValueField = "TipoAplicacaoId";
            this.TipoAplicacao.DataBind();
        }

        [WebMethod]
        public static object ListarFornecedor(string termo)
        {
            RzCorportativo.Lib.Fornecedor parans = new RzCorportativo.Lib.Fornecedor();
            parans.Cnpj = (termo ?? string.Empty).Replace(".", string.Empty).Replace("-", string.Empty).Replace("/", string.Empty);
            var lista = RzCorportativo.Lib.Fornecedor.Listar(parans);
            return lista.Select(s => new { value = s.Cnpj, label = s.Cnpj, FornecedorId = s.FornecedorId, Nome = s.Nome, Cnpj = s.Cnpj }).ToList();
        }

        [WebMethod]
        public static object ListarTipo(string termo)
        {
            RzCorportativo.Lib.TipoMedicamento parans = new RzCorportativo.Lib.TipoMedicamento();
            parans.Descricao = (termo ?? string.Empty);
            var lista = RzCorportativo.Lib.TipoMedicamento.Listar(parans);
            return lista.Select(s => new { value = s.Descricao, label = s.Descricao, Descricao = s.Descricao, TipoMedicamentoId = s.TipoMedicamentoId }).ToList();
        }

        protected void salvar_Click(object sender, EventArgs e)
        {
            Alert alert = new Alert("erroGeral", this);
            alert.AlertType = AlertType.Error;
            bool redirect = false;
            try
            {
                RzCorportativo.Lib.Medicamento medicamento = new RzCorportativo.Lib.Medicamento();
                medicamento.Tipo = new RzCorportativo.Lib.TipoMedicamento();
                medicamento.TipoMedicamentoId = IntExtension.Parse(this.TipoMedicamentoId.Value, this.TipoMedicamentoId.Value.Length > 0 ? -1 : 0);
                medicamento.MedicamentoId = LongExtension.Parse(this.MedicamentoId.Value, this.MedicamentoId.Value.Length > 0 ? -1 : 0);
                medicamento.NumeroLote = this.Numero.Text;
                medicamento.DataEntrega = DateTimeExtension.Parse(this.DataEntrega.Text, DateTime.Now);
                medicamento.DataValidade = DateTimeExtension.Parse(this.DataValidade.Text, DateTime.Now);
                medicamento.FornecedorId = IntExtension.Parse(this.FornecedorId.Value, this.FornecedorId.Value.Length > 0 ? -1 : 0);
                medicamento.Valor = DecimalExtension.Parse(this.Valor.Text, this.Valor.Text.Length > 0 ? -1 : 0);
                medicamento.Quantidade = IntExtension.Parse(this.Quantidade.Text, 0);
                medicamento.TipoAplicacao = ShortExtension.Parse(this.TipoAplicacao.SelectedValue, 0);

                if (medicamento.MedicamentoId == -1)
                    alert.Add("MedicamentoId   ", "Código de Lote inválido.<br />Selecione um lote válido para prosseguir");
                if (medicamento.FornecedorId <= 0)
                    alert.Add("fornecedorId", "Fornecedor inválido");
                if (string.IsNullOrEmpty(medicamento.NumeroLote))
                    alert.Add("NumeroLote", "Número do Lote");
                if (string.Empty.Equals(this.IsGeneric.SelectedValue))
                    alert.Add("IsGeneric", "Informe se o medicamento é genérico ou não");
                if ("0".Equals(this.TipoAplicacao.SelectedValue))
                    alert.Add("TipoAplicacaoId", "Informe o tipo de aplicação");
                if (medicamento.DataValidade < DateTime.Now.Date)
                    alert.Add("dataValidade", "A data de válidade é menor que a data atual");
                if (medicamento.DataEntrega < DateTime.Now.Date)
                    alert.Add("dataEntrega", "A data de entrega é menor que a data atual");
                if (medicamento.Valor == -1)
                    alert.Add("valor", "Valor inválido");
                if (medicamento.Quantidade == 0)
                    alert.Add("quantidade", "Quantidade de itens no lote inválida");
                if (alert.HasMessage)
                    return;
                if (medicamento.Salvar())
                {
                    redirect = true;
                }
                else
                {
                    alert.Add("falha", "Não foi possível salvar o item");
                }
            }
            catch (Exception ex)
            {
                alert.Add("exception", ex.Message);
            }
            finally
            {
                if (alert.HasMessage)
                    alert.Show();
            }
            if (redirect)
                this.Response.Redirect(this.ResolveUrl("~/Views/Consulta/Medicamentos.aspx?op=s"));
        }
    }
}